package co.fitstart.admin.service;

import java.util.List;
import java.util.Map;

import co.fitstart.admin.entity.course.BatchDietProgram;
import co.fitstart.entity.course.round.CourseRound;
import co.fitstart.entity.courseware.dietary.Dietary;
import co.fitstart.entity.courseware.dietary.DietaryProgramTemplate;
import co.fitstart.entity.courseware.dietary.DietaryProgramType;
import co.fitstart.entity.courseware.exercise.Exercise;
import co.fitstart.entity.courseware.exercise.PlannedSchedule;
import co.fitstart.entity.courseware.fitnessgroup.BatchCourseware;
import co.fitstart.entity.courseware.fitnessgroup.BatchCoursewareType;
import co.fitstart.entity.courseware.fitnessgroup.Courseware;
import co.fitstart.entity.courseware.fitnessgroup.CoursewareMovementType;
import co.fitstart.entity.courseware.fitnessgroup.DailyCourseware;
import co.fitstart.entity.courseware.fitnessgroup.FitnessGroup;

public interface GroupService {
    
    /**
     * 
     * @param roundId
     * @param weeks
     * @return
     */
    public BatchCourseware loadBathCourseware(Long roundId, int weeks);
    
    /**
     * 
     * @param roundId
     * @param weeks
     * @param type
     * @return
     */
    public BatchCourseware loadBatchCourseware(Long roundId, int weeks, BatchCoursewareType type);
    
    /**
     * 
     * @param batchId
     * @return
     */
    public BatchCourseware loadBatchCourseware(Long batchId);
    
    /**
     * 
     * @param dailyId
     * @return
     */
    public DailyCourseware loadDailyCourseware(Long dailyId);
    
    /**
     * 
     * @param batch
     * @param sorting
     * @return
     */
    public DailyCourseware loadDailyCourseware(BatchCourseware batch, int sorting);
    
    /**
     * 
     * @param coursewareId
     * @return
     */
    public Courseware loadCourseware(Long coursewareId);
    
    /**
     * 
     * @param dailyCourseware
     */
    public void rest(DailyCourseware dailyCourseware);
    
    /**
     * 
     * @param dailyCourseware
     * @param courseware
     * @param movementType
     */
    public void createCourseware(DailyCourseware dailyCourseware, Courseware courseware, CoursewareMovementType movementType);
    
    /**
     * 
     * @param dailyCourseware
     * @param fitnessGroup
     * @param type
     */
    public void createCoursewareGroup(DailyCourseware dailyCourseware, FitnessGroup fitnessGroup, CoursewareMovementType type);
    
    /**
     * 
     * @param courseware
     */
    public void editCourseware(Courseware courseware);
    
    /**
     * 
     * @param courseware
     */
    public void deleteCourseware(Courseware courseware);
    
    /**
     * 
     * @param batchCourseware
     * @param dietaryProgramTemplate
     */
    public void editDiet(BatchCourseware batchCourseware, DietaryProgramTemplate dietaryProgramTemplate);
    
    /**
     * 
     * @param batchCourseware
     * @param dietaryProgramTemplate
     * @param type
     */
    public void editSnack(BatchCourseware batchCourseware, DietaryProgramTemplate dietaryProgramTemplate, DietaryProgramType type);
    
    /**
     * 
     * @param batchCourseware
     * @param batchDietProgram
     */
    public void saveDiets(BatchCourseware batchCourseware, BatchDietProgram batchDietProgram);
    
    /**
     * 
     * @param batchCourseware
     */
    public void linkBatchCourseware(BatchCourseware batchCourseware);
    
    /**
     * 
     * @param batchCourseware
     * @param week
     * @param coachTips
     */
    public void onlineRoundLink(BatchCourseware batchCourseware, int week, String coachTips);
    
    /**
     * 
     * @param roundCode
     * @param groupName
     * @param week
     * @param coachTips
     */
    public void onlineRoundBatchLink(String roundCode, String groupName, int week, String coachTips);
    
    /**
     * 
     * @param dailyCourseware
     */
    public void linkDailyCourseware(DailyCourseware dailyCourseware);
    
    /**
     * 
     * @param batchCourseware
     */
    public void saveAll(BatchCourseware batchCourseware);
    
    /**
     * 
     * @param ids
     * @param names
     * @param descriptions
     */
    public void editCoursewareTags(List<Long> ids, List<String> names, List<String> descriptions);
    
    /**
     * 
     * @param batchCourseware
     * @return
     */
    public Dietary loadDietary(BatchCourseware batchCourseware);
    
    /**
     * 
     * @param batchCourseware
     * @return
     */
    public Exercise loadExercise(BatchCourseware batchCourseware);
    
    /**
     * 
     * @param batchCourseware
     * @return
     */
    public List<PlannedSchedule> listPlannedSchedule(BatchCourseware batchCourseware);
    
    /**
     * 
     * @param courseRound
     * @param generated
     * @return
     */
    public Map<Integer, Dietary> listDietary(CourseRound courseRound, boolean generated);
    
    /**
     * 
     * @param courseRound
     * @param generated
     * @return
     */
    public Map<Integer, Exercise> listExercise(CourseRound courseRound, boolean generated);
    
    /**
     * 
     * @param courseRound
     * @param generated
     * @return
     */
    public Map<Integer, Map<Integer, Map<String, Object>>> listSchedule(CourseRound courseRound, boolean generated);
    
    /**
     * 
     * @param courseRound
     * @return
     */
    public Map<Integer, Map<String, Object>> listCourseWare(CourseRound courseRound);
    
    /**
     * 
     * @param courseRound
     * @param session
     * @return
     */
    public Map<String, Object> loadCourseWare(CourseRound courseRound, int session);
    
    /**
     * 
     * @param courseware
     */
    public void riseRanking(Courseware courseware);
    
    /**
     * 
     * @param courseware
     */
    public void dropRanking(Courseware courseware);
}
